<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><style>body {
  max-width: 980px;
  margin: 16px auto;
}

body .markdown-body
{
  padding: 45px;
}

@font-face {
  font-family: fontawesome-mini;
  src: url(data:font/woff;charset=utf-8;base64,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) format('woff');
}

.markdown-body {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
  color: #333333;
  overflow: hidden;
  font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
  font-size: 16px;
  line-height: 1.6;
  word-wrap: break-word;
}

.markdown-body a {
  background: transparent;
}

.markdown-body a:active,
.markdown-body a:hover {
  outline: 0;
}

.markdown-body b,
.markdown-body strong {
  font-weight: bold;
}

.markdown-body mark {
  background: #ff0;
  color: #000;
  font-style: italic;
  font-weight: bold;
}

.markdown-body sub,
.markdown-body sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
.markdown-body sup {
  top: -0.5em;
}
.markdown-body sub {
  bottom: -0.25em;
}

.markdown-body h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

.markdown-body img {
  border: 0;
}

.markdown-body hr {
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  height: 0;
}

.markdown-body pre {
  overflow: auto;
}

.markdown-body code,
.markdown-body kbd,
.markdown-body pre,
.markdown-body samp {
  font-family: monospace, monospace;
  font-size: 1em;
}

.markdown-body input {
  color: inherit;
  font: inherit;
  margin: 0;
}

.markdown-body html input[disabled] {
  cursor: default;
}

.markdown-body input {
  line-height: normal;
}

.markdown-body input[type="checkbox"] {
  box-sizing: border-box;
  padding: 0;
}

.markdown-body table {
  border-collapse: collapse;
  border-spacing: 0;
}

.markdown-body td,
.markdown-body th {
  padding: 0;
}

.markdown-body .codehilitetable,
.markdown-body .highlighttable {
  border: 0;
  border-spacing: 0;
}

.markdown-body .codehilitetable tr,
.markdown-body .highlighttable {
  border: 0;
}

.markdown-body .codehilitetable pre,
.markdown-body .codehilitetable div.codehilite,
.markdown-body .highlighttable pre,
.markdown-body .highlighttable div.highlight {
  margin: 0;
}

.markdown-body .linenos,
.markdown-body .code,
.markdown-body .codehilitetable td,
.markdown-body .highlighttable td {
  border: 0;
  padding: 0;
}

.markdown-body td:not(.linenos) .linenodiv {
  padding: 0 !important;
}

.markdown-body .code {
  width: 100%;
}

.markdown-body .linenos div pre,
.markdown-body .linenodiv pre,
.markdown-body .linenodiv {
  border: 0;
  -webkit-border-radius: 0;
  -moz-border-radius: 0;
  border-radius: 0;
  -webkit-border-top-left-radius: 3px;
  -webkit-border-bottom-left-radius: 3px;
  -moz-border-radius-topleft: 3px;
  -moz-border-radius-bottomleft: 3px;
  border-top-left-radius: 3px;
  border-bottom-left-radius: 3px;
}

.markdown-body .code div pre,
.markdown-body .code div {
  border: 0;
  -webkit-border-radius: 0;
  -moz-border-radius: 0;
  border-radius: 0;
  -webkit-border-top-right-radius: 3px;
  -webkit-border-bottom-right-radius: 3px;
  -moz-border-radius-topright: 3px;
  -moz-border-radius-bottomright: 3px;
  border-top-right-radius: 3px;
  border-bottom-right-radius: 3px;
}

.markdown-body * {
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

.markdown-body input {
  font: 13px Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
  line-height: 1.4;
}

.markdown-body a {
  color: #4183c4;
  text-decoration: none;
}

.markdown-body a:hover,
.markdown-body a:focus,
.markdown-body a:active {
  text-decoration: underline;
}

.markdown-body hr {
  height: 0;
  margin: 15px 0;
  overflow: hidden;
  background: transparent;
  border: 0;
  border-bottom: 1px solid #ddd;
}

.markdown-body hr:before,
.markdown-body hr:after {
  display: table;
  content: " ";
}

.markdown-body hr:after {
  clear: both;
}

.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
  margin-top: 15px;
  margin-bottom: 15px;
  line-height: 1.1;
}

.markdown-body h1 {
  font-size: 30px;
}

.markdown-body h2 {
  font-size: 21px;
}

.markdown-body h3 {
  font-size: 16px;
}

.markdown-body h4 {
  font-size: 14px;
}

.markdown-body h5 {
  font-size: 12px;
}

.markdown-body h6 {
  font-size: 11px;
}

.markdown-body blockquote {
  margin: 0;
}

.markdown-body ul,
.markdown-body ol {
  padding: 0;
  margin-top: 0;
  margin-bottom: 0;
}

.markdown-body ol ol,
.markdown-body ul ol {
  list-style-type: lower-roman;
}

.markdown-body ul ul ol,
.markdown-body ul ol ol,
.markdown-body ol ul ol,
.markdown-body ol ol ol {
  list-style-type: lower-alpha;
}

.markdown-body dd {
  margin-left: 0;
}

.markdown-body code,
.markdown-body pre,
.markdown-body samp {
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  font-size: 12px;
}

.markdown-body pre {
  margin-top: 0;
  margin-bottom: 0;
}

.markdown-body kbd {
  background-color: #e7e7e7;
  background-image: -moz-linear-gradient(#fefefe, #e7e7e7);
  background-image: -webkit-linear-gradient(#fefefe, #e7e7e7);
  background-image: linear-gradient(#fefefe, #e7e7e7);
  background-repeat: repeat-x;
  border-radius: 2px;
  border: 1px solid #cfcfcf;
  color: #000;
  padding: 3px 5px;
  line-height: 10px;
  font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
  display: inline-block;
}

.markdown-body>*:first-child {
  margin-top: 0 !important;
}

.markdown-body>*:last-child {
  margin-bottom: 0 !important;
}

.markdown-body .headerlink {
  font: normal 400 16px fontawesome-mini;
  vertical-align: middle;
  margin-left: -16px;
  float: left;
  display: inline-block;
  text-decoration: none;
  opacity: 0;
  color: #333;
}

.markdown-body .headerlink:focus {
  outline: none;
}

.markdown-body h1 .headerlink {
  margin-top: 0.8rem;
}

.markdown-body h2 .headerlink,
.markdown-body h3 .headerlink {
  margin-top: 0.6rem;
}

.markdown-body h4 .headerlink {
  margin-top: 0.2rem;
}

.markdown-body h5 .headerlink,
.markdown-body h6 .headerlink {
  margin-top: 0;
}

.markdown-body .headerlink:hover,
.markdown-body h1:hover .headerlink,
.markdown-body h2:hover .headerlink,
.markdown-body h3:hover .headerlink,
.markdown-body h4:hover .headerlink,
.markdown-body h5:hover .headerlink,
.markdown-body h6:hover .headerlink {
  opacity: 1;
  text-decoration: none;
}

.markdown-body h1 {
  padding-bottom: 0.3em;
  font-size: 2.25em;
  line-height: 1.2;
  border-bottom: 1px solid #eee;
}

.markdown-body h2 {
  padding-bottom: 0.3em;
  font-size: 1.75em;
  line-height: 1.225;
  border-bottom: 1px solid #eee;
}

.markdown-body h3 {
  font-size: 1.5em;
  line-height: 1.43;
}

.markdown-body h4 {
  font-size: 1.25em;
}

.markdown-body h5 {
  font-size: 1em;
}

.markdown-body h6 {
  font-size: 1em;
  color: #777;
}

.markdown-body p,
.markdown-body blockquote,
.markdown-body ul,
.markdown-body ol,
.markdown-body dl,
.markdown-body table,
.markdown-body pre,
.markdown-body .admonition {
  margin-top: 0;
  margin-bottom: 16px;
}

.markdown-body hr {
  height: 4px;
  padding: 0;
  margin: 16px 0;
  background-color: #e7e7e7;
  border: 0 none;
}

.markdown-body ul,
.markdown-body ol {
  padding-left: 2em;
}

.markdown-body ul ul,
.markdown-body ul ol,
.markdown-body ol ol,
.markdown-body ol ul {
  margin-top: 0;
  margin-bottom: 0;
}

.markdown-body li>p {
  margin-top: 16px;
}

.markdown-body dl {
  padding: 0;
}

.markdown-body dl dt {
  padding: 0;
  margin-top: 16px;
  font-size: 1em;
  font-style: italic;
  font-weight: bold;
}

.markdown-body dl dd {
  padding: 0 16px;
  margin-bottom: 16px;
}

.markdown-body blockquote {
  padding: 0 15px;
  color: #777;
  border-left: 4px solid #ddd;
}

.markdown-body blockquote>:first-child {
  margin-top: 0;
}

.markdown-body blockquote>:last-child {
  margin-bottom: 0;
}

.markdown-body table {
  display: block;
  width: 100%;
  overflow: auto;
  word-break: normal;
  word-break: keep-all;
}

.markdown-body table th {
  font-weight: bold;
}

.markdown-body table th,
.markdown-body table td {
  padding: 6px 13px;
  border: 1px solid #ddd;
}

.markdown-body table tr {
  background-color: #fff;
  border-top: 1px solid #ccc;
}

.markdown-body table tr:nth-child(2n) {
  background-color: #f8f8f8;
}

.markdown-body img {
  max-width: 100%;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

.markdown-body code,
.markdown-body samp {
  padding: 0;
  padding-top: 0.2em;
  padding-bottom: 0.2em;
  margin: 0;
  font-size: 85%;
  border-radius: 3px;
}

.markdown-body code:not(.highlight):not(.codehilite), .markdown-body samp {
  background-color: rgba(0,0,0,0.04);
}

.markdown-body code:before,
.markdown-body code:after {
  letter-spacing: -0.2em;
  content: "\00a0";
}

.markdown-body pre>code {
  padding: 0;
  margin: 0;
  font-size: 100%;
  word-break: normal;
  white-space: pre;
  background: transparent;
  border: 0;
}

.markdown-body .codehilite,
.markdown-body .highlight {
  margin-bottom: 16px;
}

.markdown-body .codehilite pre,
.markdown-body .highlight pre,
.markdown-body pre {
  padding: 16px;
  overflow: auto;
  font-size: 85%;
  line-height: 1.45;
}

.markdown-body .codehilite,
.markdown-body .highlight,
.markdown-body pre {
  border-radius: 3px;
}

.markdown-body :not(.highlight) > pre {
  background-color: #f7f7f7;
}

.markdown-body .codehilite pre,
.markdown-body .highlight pre {
  margin-bottom: 0;
  word-break: normal;
}

.markdown-body pre {
  word-wrap: normal;
}

.markdown-body pre code {
  display: inline;
  max-width: initial;
  padding: 0;
  margin: 0;
  overflow: initial;
  line-height: inherit;
  word-wrap: normal;
  background-color: transparent;
  border: 0;
}

.markdown-body pre code:before,
.markdown-body pre code:after {
  content: normal;
}

/* Admonition */
.markdown-body .admonition {
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  position: relative;
  border-radius: 3px;
  border: 1px solid #e0e0e0;
  border-left: 6px solid #333;
  padding: 10px 10px 10px 30px;
}

.markdown-body .admonition table {
  color: #333;
}

.markdown-body .admonition p {
  padding: 0;
}

.markdown-body .admonition-title {
  font-weight: bold;
  margin: 0;
}

.markdown-body .admonition>.admonition-title {
  color: #333;
}

.markdown-body .attention>.admonition-title {
  color: #a6d796;
}

.markdown-body .caution>.admonition-title {
  color: #d7a796;
}

.markdown-body .hint>.admonition-title {
  color: #96c6d7;
}

.markdown-body .danger>.admonition-title {
  color: #c25f77;
}

.markdown-body .question>.admonition-title {
  color: #96a6d7;
}

.markdown-body .note>.admonition-title {
  color: #d7c896;
}

.markdown-body .admonition:before,
.markdown-body .attention:before,
.markdown-body .caution:before,
.markdown-body .hint:before,
.markdown-body .danger:before,
.markdown-body .question:before,
.markdown-body .note:before {
  font: normal normal 16px fontawesome-mini;
  -moz-osx-font-smoothing: grayscale;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  line-height: 1.5;
  color: #333;
  position: absolute;
  left: 0;
  top: 0;
  padding-top: 10px;
  padding-left: 10px;
}

.markdown-body .admonition:before {
  content: "\f056\00a0";
  color: 333;
}

.markdown-body .attention:before {
  content: "\f058\00a0";
  color: #a6d796;
}

.markdown-body .caution:before {
  content: "\f06a\00a0";
  color: #d7a796;
}

.markdown-body .hint:before {
  content: "\f05a\00a0";
  color: #96c6d7;
}

.markdown-body .danger:before {
  content: "\f057\00a0";
  color: #c25f77;
}

.markdown-body .question:before {
  content: "\f059\00a0";
  color: #96a6d7;
}

.markdown-body .note:before {
  content: "\f040\00a0";
  color: #d7c896;
}

.markdown-body .admonition::after {
  content: normal;
}

.markdown-body .attention {
  border-left: 6px solid #a6d796;
}

.markdown-body .caution {
  border-left: 6px solid #d7a796;
}

.markdown-body .hint {
  border-left: 6px solid #96c6d7;
}

.markdown-body .danger {
  border-left: 6px solid #c25f77;
}

.markdown-body .question {
  border-left: 6px solid #96a6d7;
}

.markdown-body .note {
  border-left: 6px solid #d7c896;
}

.markdown-body .admonition>*:first-child {
  margin-top: 0 !important;
}

.markdown-body .admonition>*:last-child {
  margin-bottom: 0 !important;
}

/* progress bar*/
.markdown-body .progress {
  display: block;
  width: 300px;
  margin: 10px 0;
  height: 24px;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  background-color: #ededed;
  position: relative;
  box-shadow: inset -1px 1px 3px rgba(0, 0, 0, .1);
}

.markdown-body .progress-label {
  position: absolute;
  text-align: center;
  font-weight: bold;
  width: 100%; margin: 0;
  line-height: 24px;
  color: #333;
  text-shadow: 1px 1px 0 #fefefe, -1px -1px 0 #fefefe, -1px 1px 0 #fefefe, 1px -1px 0 #fefefe, 0 1px 0 #fefefe, 0 -1px 0 #fefefe, 1px 0 0 #fefefe, -1px 0 0 #fefefe, 1px 1px 2px #000;
  -webkit-font-smoothing: antialiased !important;
  white-space: nowrap;
  overflow: hidden;
}

.markdown-body .progress-bar {
  height: 24px;
  float: left;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  background-color: #96c6d7;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .5), inset 0 -1px 0 rgba(0, 0, 0, .1);
  background-size: 30px 30px;
  background-image: -webkit-linear-gradient(
    135deg, rgba(255, 255, 255, .4) 27%,
    transparent 27%,
    transparent 52%, rgba(255, 255, 255, .4) 52%,
    rgba(255, 255, 255, .4) 77%,
    transparent 77%, transparent
  );
  background-image: -moz-linear-gradient(
    135deg,
    rgba(255, 255, 255, .4) 27%, transparent 27%,
    transparent 52%, rgba(255, 255, 255, .4) 52%,
    rgba(255, 255, 255, .4) 77%, transparent 77%,
    transparent
  );
  background-image: -ms-linear-gradient(
    135deg,
    rgba(255, 255, 255, .4) 27%, transparent 27%,
    transparent 52%, rgba(255, 255, 255, .4) 52%,
    rgba(255, 255, 255, .4) 77%, transparent 77%,
    transparent
  );
  background-image: -o-linear-gradient(
    135deg,
    rgba(255, 255, 255, .4) 27%, transparent 27%,
    transparent 52%, rgba(255, 255, 255, .4) 52%,
    rgba(255, 255, 255, .4) 77%, transparent 77%,
    transparent
  );
  background-image: linear-gradient(
    135deg,
    rgba(255, 255, 255, .4) 27%, transparent 27%,
    transparent 52%, rgba(255, 255, 255, .4) 52%,
    rgba(255, 255, 255, .4) 77%, transparent 77%,
    transparent
  );
}

.markdown-body .progress-100plus .progress-bar {
  background-color: #a6d796;
}

.markdown-body .progress-80plus .progress-bar {
  background-color: #c6d796;
}

.markdown-body .progress-60plus .progress-bar {
  background-color: #d7c896;
}

.markdown-body .progress-40plus .progress-bar {
  background-color: #d7a796;
}

.markdown-body .progress-20plus .progress-bar {
  background-color: #d796a6;
}

.markdown-body .progress-0plus .progress-bar {
  background-color: #c25f77;
}

.markdown-body .candystripe-animate .progress-bar{
  -webkit-animation: animate-stripes 3s linear infinite;
  -moz-animation: animate-stripes 3s linear infinite;
  animation: animate-stripes 3s linear infinite;
}

@-webkit-keyframes animate-stripes {
  0% {
    background-position: 0 0;
  }

  100% {
    background-position: 60px 0;
  }
}

@-moz-keyframes animate-stripes {
  0% {
    background-position: 0 0;
  }

  100% {
    background-position: 60px 0;
  }
}

@keyframes animate-stripes {
  0% {
    background-position: 0 0;
  }

  100% {
    background-position: 60px 0;
  }
}

.markdown-body .gloss .progress-bar {
  box-shadow:
    inset 0 4px 12px rgba(255, 255, 255, .7),
    inset 0 -12px 0 rgba(0, 0, 0, .05);
}

/* MultiMarkdown Critic Blocks */
.markdown-body .critic_mark {
  background: #ff0;
}

.markdown-body .critic_delete {
  color: #c82829;
  text-decoration: line-through;
}

.markdown-body .critic_insert {
  color: #718c00 ;
  text-decoration: underline;
}

.markdown-body .critic_comment {
  color: #8e908c;
  font-style: italic;
}

.markdown-body .headeranchor {
  font: normal normal 16px fontawesome-mini;
  line-height: 1;
  display: inline-block;
  text-decoration: none;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

.headeranchor:before {
  content: '\e157';
}

.markdown-body .task-list-item {
  list-style-type: none;
}

.markdown-body .task-list-item+.task-list-item {
  margin-top: 3px;
}

.markdown-body .task-list-item input {
  margin: 0 4px 0.25em -20px;
  vertical-align: middle;
}

.markdown-body diagram-div, .markdown-body div.uml-sequence-diagram, .markdown-body, div.uml-flowchart {
  overflow: auto;
}

/* Media */
@media only screen and (min-width: 480px) {
  .markdown-body {
    font-size:14px;
  }
}

@media only screen and (min-width: 768px) {
  .markdown-body {
    font-size:16px;
  }
}

@media print {
  .markdown-body * {
    background: transparent !important;
    color: black !important;
    filter:none !important;
    -ms-filter: none !important;
  }

  .markdown-body {
    font-size:12pt;
    max-width:100%;
    outline:none;
    border: 0;
  }

  .markdown-body a,
  .markdown-body a:visited {
    text-decoration: underline;
  }

  .markdown-body .headeranchor-link {
    display: none;
  }

  .markdown-body a[href]:after {
    content: " (" attr(href) ")";
  }

  .markdown-body abbr[title]:after {
    content: " (" attr(title) ")";
  }

  .markdown-body .ir a:after,
  .markdown-body a[href^="javascript:"]:after,
  .markdown-body a[href^="#"]:after {
    content: "";
  }

  .markdown-body pre {
    white-space: pre;
    white-space: pre-wrap;
    word-wrap: break-word;
  }

  .markdown-body pre,
  .markdown-body blockquote {
    border: 1px solid #999;
    padding-right: 1em;
    page-break-inside: avoid;
  }

  .markdown-body .progress,
  .markdown-body .progress-bar {
    -moz-box-shadow: none;
    -webkit-box-shadow: none;
    box-shadow: none;
  }

  .markdown-body .progress {
    border: 1px solid #ddd;
  }

  .markdown-body .progress-bar {
    height: 22px;
    border-right: 1px solid #ddd;
  }

  .markdown-body tr,
  .markdown-body img {
    page-break-inside: avoid;
  }

  .markdown-body img {
    max-width: 100% !important;
  }

  .markdown-body p,
  .markdown-body h2,
  .markdown-body h3 {
    orphans: 3;
    widows: 3;
  }

  .markdown-body h2,
  .markdown-body h3 {
    page-break-after: avoid;
  }
}
</style><style>/*GitHub*/
.highlight {background-color:#f7f7f7;color:#333333;}
.highlight .hll {background-color:#ffffcc;}
.highlight .c{color:#999988;font-style:italic}
.highlight .err{color:#a61717;background-color:#e3d2d2}
.highlight .k{font-weight:bold}
.highlight .o{font-weight:bold}
.highlight .cm{color:#999988;font-style:italic}
.highlight .cp{color:#999999;font-weight:bold}
.highlight .c1{color:#999988;font-style:italic}
.highlight .cs{color:#999999;font-weight:bold;font-style:italic}
.highlight .gd{color:#000000;background-color:#ffdddd}
.highlight .ge{font-style:italic}
.highlight .gr{color:#aa0000}
.highlight .gh{color:#999999}
.highlight .gi{color:#000000;background-color:#ddffdd}
.highlight .go{color:#888888}
.highlight .gp{color:#555555}
.highlight .gs{font-weight:bold}
.highlight .gu{color:#800080;font-weight:bold}
.highlight .gt{color:#aa0000}
.highlight .kc{font-weight:bold}
.highlight .kd{font-weight:bold}
.highlight .kn{font-weight:bold}
.highlight .kp{font-weight:bold}
.highlight .kr{font-weight:bold}
.highlight .kt{color:#445588;font-weight:bold}
.highlight .m{color:#009999}
.highlight .s{color:#dd1144}
.highlight .n{color:#333333}
.highlight .na{color:teal}
.highlight .nb{color:#0086b3}
.highlight .nc{color:#445588;font-weight:bold}
.highlight .no{color:teal}
.highlight .ni{color:purple}
.highlight .ne{color:#990000;font-weight:bold}
.highlight .nf{color:#990000;font-weight:bold}
.highlight .nn{color:#555555}
.highlight .nt{color:navy}
.highlight .nv{color:teal}
.highlight .ow{font-weight:bold}
.highlight .w{color:#bbbbbb}
.highlight .mf{color:#009999}
.highlight .mh{color:#009999}
.highlight .mi{color:#009999}
.highlight .mo{color:#009999}
.highlight .sb{color:#dd1144}
.highlight .sc{color:#dd1144}
.highlight .sd{color:#dd1144}
.highlight .s2{color:#dd1144}
.highlight .se{color:#dd1144}
.highlight .sh{color:#dd1144}
.highlight .si{color:#dd1144}
.highlight .sx{color:#dd1144}
.highlight .sr{color:#009926}
.highlight .s1{color:#dd1144}
.highlight .ss{color:#990073}
.highlight .bp{color:#999999}
.highlight .vc{color:teal}
.highlight .vg{color:teal}
.highlight .vi{color:teal}
.highlight .il{color:#009999}
.highlight .gc{color:#999;background-color:#EAF2F5}
</style><title>vim_cmd</title></head><body><article class="markdown-body"><div class="highlight"><pre>https://blog.csdn.net/weixin_48304306/article/details/131975708
</pre></div>

<h2 id="vim">vim模式介绍<a class="headerlink" href="#vim" title="Permanent link"></a></h2>
<div class="highlight"><pre>正常模式：可以使用快捷键命令，或按“：”输入命令行。
</pre></div>

<div class="highlight"><pre>插入模式：可以输入文本，在正常模式下，按i、a、o等都可以进入插入模式。
</pre></div>

<div class="highlight"><pre>可视模式：正常模式下按v可以进入可视模式， 在可视模式下，移动光标可以选择文本。按V进入可视行模式， 总是整行整行的选中。ctrl+v进入可视块模式，之后使用 j/k/h/l键可以选中一块
</pre></div>

<div class="highlight"><pre>替换模式：正常模式下，按R进入。
1.R 替换模式
2.r 只替换单个字符
3.gR 进入虚拟替换模式
4.gr 进入单字符替换模式
</pre></div>

<h2 id="vim_1">vim启动<a class="headerlink" href="#vim_1" title="Permanent link"></a></h2>
<div class="highlight"><pre>1.vim -c cmd file: 在打开文件前，先执行指定的命令

2.vim -r file: 恢复上次异常退出的文件；

3.vim -R file: 以只读的方式打开文件，但可以强制保存；

4.vim -M file: 以只读的方式打开文件，不可以强制保存；

5.vim -y num file: 将编辑窗口的大小设为num行；

6.vim + file: 从文件的末尾开始；

7.vim +num file: 从第num行开始；

8.vim +/string file: 打开file，并将光标停留在第一个找到的string上。

10.vim --remote file: 用已有的vim进程打开指定的文件。 如果你不想启用多个vim会话，这个很有用。但要注意， 如果你用vim，会寻找名叫VIM的服务器；如果你已经
有一个gvim在运行了， 你可以用gvim --remote file在已有的gvim中打开文件。
</pre></div>

<h3 id="vim_2">vim 文档操作<a class="headerlink" href="#vim_2" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.:e file --关闭当前编辑的文件，并开启新的文件。 如果对当前文件的修改未保存，vi会警告。

2.:e! file --放弃对当前文件的修改，编辑新的文件。

3.:e+file -- 开始新的文件，并从文件尾开始编辑。

4.:e+n file -- 开始新的文件，并从第n行开始编辑。

5.:enew --编译一个未命名的新文档。(CTRL-W n)

6.:e -- 重新加载当前文档。

7.:e! -- 重新加载当前文档，并丢弃已做的改动。

8.:e#或ctrl+^ -- 回到刚才编辑的文件，很实用。

9.:f或ctrl+g -- 显示文档名，是否修改，和光标位置。

10.:f filename -- 改变编辑的文件名，这时再保存相当于另存为。

11.gf -- 打开以光标所在字符串为文件名的文件。

12.:w -- 保存修改。

13.:n1,n2w filename -- 选择性保存从某n1行到另n2行的内容。

14.:wq -- 保存并退出。

15.ZZ -- 保存并退出。

16.:x -- 保存并退出。

17.:q[uit] ——退出当前窗口。(CTRL-W q或CTRL-W CTRL-Q)

18.:saveas newfilename -- 另存为

19.:browse e -- 会打开一个文件浏览器让你选择要编辑的文件。 如果是终端中，则会打开netrw的文件浏览窗口； 如果是gvim，则会打开一个图形界面的浏览窗口。 实际上:browse后可以跟任何编辑文档的命令，如sp等。 用browse打开的起始目录可以由browsedir来设置：

20.:Sex -- 水平分割一个窗口，浏览文件系统；

21.:Vex -- 垂直分割一个窗口，浏览文件系统；
</pre></div>

<h3 id="vim_3">vim 左右上下光标的移动，以下操作前面都可以带有数字，表示操作数<a class="headerlink" href="#vim_3" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.h或退格: 左移一个字符；

2.l或空格: 右移一个字符；

3.j: 下移一行；

4.k: 上移一行；

5.gj: 移动到一段内的下一行；

6.gk: 移动到一段内的上一行；

7.+或Enter: 把光标移至下一行第一个非空白字符。

8.-: 把光标移至上一行第一个非空白字符。

9.w: 前移一个单词，光标停在下一个单词开头；

10.W: 移动下一个单词开头，但忽略一些标点；

11.e: 前移一个单词，光标停在下一个单词末尾；

12.e: 前移一个单词，光标停在下一个单词末尾；

13.b: 后移一个单词，光标停在上一个单词开头；

14.b: 后移一个单词，光标停在上一个单词开头；

15.ge: 后移一个单词，光标停在上一个单词末尾；

16.gE: 同 ge ，不过‘单词’包含单词相邻的标点。

17.(: 前移1句。

18.): 后移1句。

19.{: 前移1段。

20.}: 后移1段。

21.fc: 把光标移到同一行的下一个c字符处

22.Fc: 把光标移到同一行的上一个c字符处

23.tc: 把光标移到同一行的下一个c字符前

24.Tc: 把光标移到同一行的上一个c字符后

25.;: 配合f &amp; t使用，重复一次，比如fa后，再; 表示继续fa

26.,: 配合f &amp; t使用，反向重复一次
</pre></div>

<h3 id="vim_4">vim 光标移动不能够带有操作数<a class="headerlink" href="#vim_4" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.0: 移动到行首。

2.g0: 移到光标所在屏幕行行首。

3.^: 移动到本行第一个非空白字符。

4.g^: 同 ^ ，但是移动到当前屏幕行第一个非空字符处。

5.$: 移动到行尾。

6.g$: 移动光标所在屏幕行行尾。

7.n|: 把光标移到递n列上。

8.nG: 到文件第n行。

9.:n  移动到第n行。

10.:$ 移动到最后一行。

11.H: 把光标移到屏幕最顶端一行。

12.M: 把光标移到屏幕中间一行。

13.L: 把光标移到屏幕最底端一行。

14.gg: 到文件头部。

15.G: 到文件尾部。
</pre></div>

<h3 id="vim_5">vim 翻屏<a class="headerlink" href="#vim_5" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.ctrl+f: 下翻一屏。

2.ctrl+b: 上翻一屏。

3.ctrl+d: 下翻半屏。

4.ctrl+u: 上翻半屏。

5.ctrl+e: 向下滚动一行。

6.ctrl+y: 向上滚动一行。

7.n%: 到文件n%的位置。

8.zz: 将当前行移动到屏幕中央。

9.zt: 将当前行移动到屏幕顶端。

10.zb: 将当前行移动到屏幕底端。
</pre></div>

<h3 id="vim-ctrlo-ctrloctrli">vim标记    使用标记可以快速移动。到达标记后，可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的 <em>后退</em> 和 <em>前进</em> 。<a class="headerlink" href="#vim-ctrlo-ctrloctrli" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.m{a-z}: 标记光标所在位置，局部标记，只用于当前文件。

2.m{A-Z}: 标记光标所在位置，全局标记。标记之后，退出Vim， 重新启动，标记仍然有效。

3.`{a-z}: 移动到标记位置。

4.&#39;{a-z}: 移动到标记行的行首。

5.`{0-9}：回到上[2-10]次关闭vim时最后离开的位置。

6.``: 移动到上次编辑的位置。&#39;&#39;也可以，不过``精确到列，而&#39;&#39;精确到行 。如果想跳转到更老的位置，可以按C-o，跳转到更新的位置用C-i。

7.`&quot;: 移动到上次离开的地方。

9.`.: 移动到最后改动的地方。

10.:marks 显示所有标记。

11.:delmarks a b -- 删除标记a和b。

12.:delmarks a-c -- 删除标记a、b和c。

13.:delmarks a c-f -- 删除标记a、c、d、e、f。

14.:delmarks! -- 删除当前缓冲区的所有标记。

15.:help mark-motions 查看更多关于mark的知识。
</pre></div>

<h3 id="vim_6">vim插入文本<a class="headerlink" href="#vim_6" title="Permanent link"></a></h3>
<h4 id="51">5.1 基本插入<a class="headerlink" href="#51" title="Permanent link"></a></h4>
<div class="highlight"><pre>1.i: 在光标前插入；一个小技巧：
按8，再按i，进入插入模式，输入=， 按esc进入命令模式，就会出现8个=。
这在插入分割线时非常有用，如30i+&lt;esc&gt;就插入了36个+组成的分割线。

2.I: 在当前行第一个非空字符前插入；

3.gI: 在当前行第一列插入；

4.a: 在光标后插入；

5.A: 在当前行最后插入；

6.o: 在下面新建一行插入；

7.O: 在上面新建一行插入；

8.:r filename在当前位置插入另一个文件的内容。

9.:[n]r filename在第n行插入另一个文件的内容。

10.:r !date 在光标处插入当前日期与时间。
同理，:r !command可以将其它shell命令的输出插入当前文档。
</pre></div>

<h3 id="vim_7">vim 改写插入<a class="headerlink" href="#vim_7" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.c[n]w: 改写光标后1(n)个词。c2w 表示删除这个光标

2.c[n]l: 改写光标后n个字母。

3.c[n]h: 改写光标前n个字母。

4.[n]cc: 修改当前[n]行。

5.[n]s: 以输入的文本替代光标之后1(n)个字符，相当于c[n]l。

6.[n]S: 删除指定数目的行，并以所输入文本代替之。

7.cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。
</pre></div>

<h3 id="vim-mny-mn">vim 剪切复制 （:m,ny<cr> 复制m行到n行的内容。）<a class="headerlink" href="#vim-mny-mn" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.[n]x: 剪切光标右边n个字符，相当于d[n]l。

2.[n]X: 剪切光标左边n个字符，相当于d[n]h。

3.y: 复制在可视模式下选中的文本。

4.yy or Y: 复制整行文本。

5.y[n]w: 复制一(n)个词。

6.y[n]l: 复制光标右边1(n)个字符。

7.y[n]h: 复制光标左边1(n)个字符。

8.y$: 从光标当前位置复制到行尾。

9.y0: 从光标当前位置复制到行首。

10.:m,ny&lt;cr&gt; 复制m行到n行的内容。

11.y1G或ygg: 复制光标以上的所有行。

12.yG: 复制光标以下的所有行。

13.yaw和yas：复制一个词和复制一个句子，即使光标不在词首和句首也没关系。

14.d: 删除（剪切）在可视模式下选中的文本。

15.d$ or D: 删除（剪切）当前位置到行尾的内容。

16.d[n]w: 删除（剪切）1(n)个单词

17.d[n]l: 删除（剪切）光标右边1(n)个字符。

18.d[n]h: 删除（剪切）光标左边1(n)个字符。

19.d0: 删除（剪切）当前位置到行首的内容

20.[n] dd: 删除（剪切）1(n)行。

21.:m,nd&lt;cr&gt; 剪切m行到n行的内容。

22.d1G或dgg: 剪切光标以上的所有行。

23.dG: 剪切光标以下的所有行。

24.daw和das：剪切一个词和剪切一个句子，即使光标不在词首和句首也没关系。

25.dt字符                     --删除本行内容，直到遇到第一个指定字符 [不包括该字符]

26.df字符                     --删除本行内容，直到遇到第一个指定字符 [包括该字符]

27.p: 在光标之后粘贴。

28.P: 在光标之前粘贴。
</pre></div>

<h3 id="vim_8">vim 文本对象<a class="headerlink" href="#vim_8" title="Permanent link"></a></h3>
<div class="highlight"><pre>:h text-objects 查看帮助文档
</pre></div>

<div class="highlight"><pre>1.文本对象的作用：通常用来表示范围。

2.文本对象操作方式[number]&lt;command&gt;[text object]

3.number表示操作个数或次数。

command表示命令。

text object表示要操作的文本对象，Vim默认提供的常用文本对象有单词为w,词组为W，句子s，段落p，双引号&quot;，单引号’，`，大括号{或}，小括号(或)，中括号[或]，尖括号&lt;或&gt;，块b/B，t(tag)比如xml/html的标签等等。
文本对象常常配合命令v(visual)，d(delete)，c(change)，y(yank)等组合使用。


4.i + 文本对象    # 内部文本对象

5.a + 文本对象    # 外部文本对象

6.# 删除3个单词并插入
3caw        # 3表示操作次数，c命令，aw表示一个单词

7.# 删除当前{里面的内容
di{         

8.# 删除当前{里面的内容，并进入插入模式
ci{

9.# 删除倒数第2的{里面的内容，并插入
c2i{        # 原形式{{...}}，删除后{}

10.# 删除倒数第2的{及其里面的内容
c2a{
</pre></div>

<h3 id="vim_9">vim寄存器<a class="headerlink" href="#vim_9" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.a-z：都可以用作寄存器名。&quot;ayy把当前行的内容放入a寄存器。

2.A-Z：用大写字母索引寄存器，可以在寄存器中追加内容。 如&quot;Ayy把当前行的内容追加到a寄存器中。

3.:reg 显示所有寄存器的内容。

4.&quot;&quot;：不加寄存器索引时，默认使用的寄存器。

5.&quot;*：当前选择缓冲区，&quot;*yy把当前行的内容放入当前选择缓冲区。

6.&quot;+：系统剪贴板。&quot;+yy把当前行的内容放入系统剪贴板。
</pre></div>

<h3 id="vim_10">vim查找替换<a class="headerlink" href="#vim_10" title="Permanent link"></a></h3>
<div class="highlight"><pre>1./something: 在后面的文本中查找something。

2.?something: 在前面的文本中查找something。

3./pattern/+number: 将光标停在包含pattern的行后面第number行上。

4./pattern/-number: 将光标停在包含pattern的行前面第number行上。

5.n: 向后查找下一个。

6.N: 向前查找下一个。
</pre></div>

<div class="highlight"><pre>可以用grep或vimgrep查找一个模式都在哪些地方出现过，
其中:grep是调用外部的grep程序，而:vimgrep是vim自己的查找算法。
用法为： :vim[grep]/pattern/[g] [j] files
g的含义是如果一个模式在一行中多次出现，则这一行也在结果中多次出现。
j的含义是grep结束后，结果停在第j项，默认是停在第一项。
vimgrep前面可以加数字限定搜索结果的上限，如
:1vim/pattern/ % 只查找那个模式在本文件中的第一个出现。
其实vimgrep在读纯文本电子书时特别有用，可以生成导航的目录。
比如电子书中每一节的标题形式为：n. xxxx。你就可以这样：
:vim/^d{1,}./ %
然后用:cw或:copen查看结果，可以用C-w H把quickfix窗口移到左侧，
就更像个目录了。
</pre></div>

<h3 id="_1">全局替换<a class="headerlink" href="#_1" title="Permanent link"></a></h3>
<div class="highlight"><pre>：%s/原始字串/目标字串
</pre></div>

<h3 id="_2">选中的行第一个替换<a class="headerlink" href="#_2" title="Permanent link"></a></h3>
<div class="highlight"><pre>：s/原始字串/目标字串
</pre></div>

<h3 id="_3">选中的行全部替换<a class="headerlink" href="#_3" title="Permanent link"></a></h3>
<div class="highlight"><pre>：s/原始字串/目标字串/g
</pre></div>

<h3 id="_4">其他替换<a class="headerlink" href="#_4" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.:s/old/new - 用new替换当前行第一个old。

2.:s/old/new/g - 用new替换当前行所有的old。

3.:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

4.:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky，n 为数字，若 n 为 .，表示从当前行开始到最后一行

5.:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

6.:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky可以使用 # 作为分隔符，此时中间出现的 / 不会作为分隔符

7.:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

8.:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / )： /oradata/apras/替换成/user01/apras1/

9.:n1,n2s/old/new/g - 用new替换文件n1行到n2行所有的old。

10:%s/old/new/g - 用new替换文件中所有的old。

11.:%s/^/xxx/g - 在每一行的行首插入xxx，^表示行首。

12.:%s/$/xxx/g - 在每一行的行尾插入xxx，$表示行尾。

所有替换命令末尾加上c，每个替换都将需要用户确认。 如：%s/old/new/gc，加上i则忽略大小写(ignore)。
</pre></div>

<div class="highlight"><pre>还有一种比替换更灵活的方式，它是匹配到某个模式后执行某种命令，
语法为 :[range]g/pattern/command
例如 :%g/^ xyz/normal dd。
表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。

关于range的规定为：

    1.如果不指定range，则表示当前行。
    2.m,n: 从m行到n行。
    3.0: 最开始一行（可能是这样）。
    4.$: 最后一行
    5..: 当前行
    6.%: 所有行
</pre></div>

<h3 id="vim_11">vim 正则表达式 高级的查找替换就要用到正则表达式。<a class="headerlink" href="#vim_11" title="Permanent link"></a></h3>
<div class="highlight"><pre>1. \d: 表示十进制数（我猜的）

2. \s: 表示空格

3.\S: 非空字符

4.\a: 英文字母

5.\|: 表示 或

6.\.: 表示.

7.{m,n}: 表示m到n个字符。这要和 \s与\a等连用，如 \a\{m,n} 表示m 到n个英文字母。

8.{m,}: 表示m到无限多个字符。

9.**: 当前目录下的所有子目录。

10.:help pattern得到更多帮助。
</pre></div>

<h3 id="vim_12">vim 文本格式排版<a class="headerlink" href="#vim_12" title="Permanent link"></a></h3>
<div class="highlight"><pre>1. &lt;&lt; 向左缩进一个shiftwidth

2. &gt;&gt; 向右缩进一个shiftwidth

3.:ce(nter) 本行文字居中

4.:le(ft) 本行文字靠左

5.:ri(ght) 本行文字靠右

6.gq 对选中的文字重排，即对过长的文字进行断行

7.gqq 重排当前行

8.gqnq 重排n行

9.gqap 重排当前段

10.gqnap 重排n段

11.gqnj 重排当前行和下面n行

12.gqQ 重排当前段对文章末尾

13.J 拼接当前行和下一行

14.gJ 同 J ，不过合并后不留空格。
</pre></div>

<h3 id="vim_13">vim 拼写检查<a class="headerlink" href="#vim_13" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.:set spell－开启拼写检查功能

2.:set nospell－关闭拼写检查功能

3.]s－移到下一个拼写错误的单词

4.[s－作用与上一命令类似，但它是从相反方向进行搜索

5.z=－显示一个有关拼写错误单词的列表，可从中选择

6.zg－告诉拼写检查器该单词是拼写正确的

7.zw－与上一命令相反，告诉拼写检查器该单词是拼写错误的
</pre></div>

<h3 id="vim_14">vim 查看当前选中片段的字数<a class="headerlink" href="#vim_14" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.按着v进入visual模式

2.选中片段

3.按g 再按 Ctrl+g，然后在下面就会显示有多少个字节，有多少个字
</pre></div>

<h3 id="vim_15">vim 编辑多个文件的切换操作<a class="headerlink" href="#vim_15" title="Permanent link"></a></h3>
<div class="highlight"><pre>1. vi a.txt b.txt c.txt 打开多个文件

2.使用:next(:n)编辑下一个文件。

3.:2n 编辑下2个文件。

4.使用:previous或:N编辑上一个文件。

5.使用:wnext，保存当前文件，并编辑下一个文件。

6.使用:wprevious，保存当前文件，并编辑上一个文件。

7.使用:args 显示文件列表。

8.:n filenames或:args filenames 指定新的文件列表。

9.vi -o filenames 在水平分割的多个窗口中编辑多个文件。

10.vi -O filenames 在垂直分割的多个窗口中编辑多个文件。
</pre></div>

<h3 id="vim_16">vim多标签的编辑<a class="headerlink" href="#vim_16" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.vim -p files: 打开多个文件，每个文件占用一个标签页。

2.:tabe, tabnew -- 如果加文件名，就在新的标签中打开这个文件， 否则打开一个空缓冲区。

3.^w gf -- 在新的标签页里打开光标下路径指定的文件。

4.:tabn -- 切换到下一个标签。Control + PageDown，也可以。

5.:tabp -- 切换到上一个标签。Control + PageUp，也可以。

6.[n] gt -- 切换到下一个标签。如果前面加了 n ， 就切换到第n个标签。第一个标签的序号就是1。

7.gT--切换到上一个。

8.:tab split -- 将当前缓冲区的内容在新页签中打开。

9.:tabc[lose] -- 关闭当前的标签页。

10.:tabo[nly] -- 关闭其它的标签页。

11.:tabs -- 列出所有的标签页和它们包含的窗口。

12.:tabm[ove] [N] -- 移动标签页，移动到第N个标签页之后。 如 tabm 0 当前标签页，就会变成第一个标签页。
</pre></div>

<h3 id="vim_17">vim缓冲区<a class="headerlink" href="#vim_17" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.:buffers或:ls或:files 显示缓冲区列表。

2.ctrl+^：在最近两个缓冲区间切换。

3.:bn -- 下一个缓冲区。

4.:bp -- 上一个缓冲区。

5.:bl -- 最后一个缓冲区。

6.:b[n]或:[n]b -- 切换到第n个缓冲区。

7.:nbw(ipeout) -- 彻底删除第n个缓冲区。

8.:nbd(elete) -- 删除第n个缓冲区，并未真正删除，还在unlisted列表中。

9.:ba[ll] -- 把所有的缓冲区在当前页中打开，每个缓冲区占一个窗口。
</pre></div>

<h3 id="vim_18">vim 分屏编辑<a class="headerlink" href="#vim_18" title="Permanent link"></a></h3>
<div class="highlight"><pre>1. vim -o file1 file2:水平分割窗口，同时打开file1和file2

2. vim -O file1 file2:垂直分割窗口，同时打开file1和file2
</pre></div>

<h3 id="vim_19">vim 水平分割<a class="headerlink" href="#vim_19" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.:split(:sp) -- 把当前窗水平分割成两个窗口。(CTRL-W s 或 CTRL-W CTRL-S) 注意如果在终端下，CTRL-S可能会冻结终端，请按CTRL-Q继续。

2.让水平分割窗口同时滚动，在两个窗口中输入    ：set scb

3.:split filename -- 水平分割窗口，并在新窗口中显示另一个文件。

4.:nsplit(:nsp) -- 水平分割出一个n行高的窗口。

5.:[N]new -- 水平分割出一个N行高的窗口，并编辑一个新文件。 (CTRL-W n或 CTRL-W CTRL-N)

6.ctrl+w f --水平分割出一个窗口，并在新窗口打开名称为光标所在词的文件 。

7.C-w C-^ -- 水平分割一个窗口，打开刚才编辑的文件。
</pre></div>

<h3 id="vim_20">vim垂直分割<a class="headerlink" href="#vim_20" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.：vsplit(:vsp) -- 把当前窗口分割成水平分布的两个窗口。 (CTRL-W v或CTRL CTRL-V)

2.:[N]vne[w] -- 垂直分割出一个新窗口。

3.:vertical 水平分割的命令： 相应的垂直分割。
</pre></div>

<h3 id="vim_21">vim 关闭子窗口<a class="headerlink" href="#vim_21" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.:qall -- 关闭所有窗口，退出vim。

2.:wall -- 保存所有修改过的窗口。

3.:only -- 只保留当前窗口，关闭其它窗口。(CTRL-W o)

4.:close -- 关闭当前窗口，CTRL-W c能实现同样的功能。 (象 :q :x同样工作 )
</pre></div>

<h3 id="vim_22">vim调整窗口大小<a class="headerlink" href="#vim_22" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.ctrl+w + --当前窗口增高一行。也可以用n增高n行。

2.ctrl+w - --当前窗口减小一行。也可以用n减小n行。

3.ctrl+w _ --当前窗口扩展到尽可能的大。也可以用n设定行数。

4.:resize n -- 当前窗口n行高。

5.ctrl+w = -- 所有窗口同样高度。

6.n ctrl+w _ -- 当前窗口的高度设定为n行。

7.ctrl+w &lt; --当前窗口减少一列。也可以用n减少n列。

8.ctrl+w &gt; --当前窗口增宽一列。也可以用n增宽n列。

9.ctrl+w | --当前窗口尽可能的宽。也可以用n设定列数。
</pre></div>

<h3 id="_5">切换和移动窗口 如果支持鼠标，切换和调整子窗口的大小就简单了。<a class="headerlink" href="#_5" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.ctrl+w ctrl+w: 切换到下一个窗口。或者是ctrl+w w。

2.ctrl+w p: 切换到前一个窗口。

3.ctrl+w h(l,j,k):切换到左（右，下，上）的窗口。

4.ctrl+w t(b):切换到最上（下）面的窗口。&lt;BR&gt;

5.ctrl+w H(L,K,J): 将当前窗口移动到最左（右、上、下）面。

6.ctrl+w r：旋转窗口的位置。

7.ctrl+w T: 将当前的窗口移动到新的标签页上。
</pre></div>

<h3 id="vim_23">vim快速编辑<a class="headerlink" href="#vim_23" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.~：反转光标大小写

2.可视模式下的U或u：把选中的文本变为大写或小写。

3.gu(U)接范围（如$，或G），可以把从光标当前位置到指定位置之间字母全部 转换成小写或大写。
如ggguG，就是把开头到最后一行之间的字母全部变为小 写。
再如gu5j，把当前行和下面四行全部变成小写。
</pre></div>

<h3 id="vim-normal">vim 替换模式（normal模式）<a class="headerlink" href="#vim-normal" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.r: 替换光标处的字符，同样支持汉字。

2.R: 进入替换模式，按esc回到正常模式。
</pre></div>

<h3 id="vim_24">vim撤销和重做<a class="headerlink" href="#vim_24" title="Permanent link"></a></h3>
<div class="highlight"><pre>1. [n] u: 取消一(n)个改动。

2.:undo 5 -- 撤销5个改变。

3.:undolist -- 你的撤销历史。

4.ctrl + r: 重做最后的改动。

5.U: 取消当前行中所有的改动。

6.:earlier 4m -- 回到4分钟前

7.:later 55s -- 前进55秒
</pre></div>

<h3 id="vim_25">vim 宏<a class="headerlink" href="#vim_25" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.. --重复上一个编辑动作

2.qa：开始录制宏a（键盘操作记录）

3.q：停止录制

4.@a：播放宏a
</pre></div>

<h3 id="vim_26">vim 编辑特殊文件<a class="headerlink" href="#vim_26" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.vim -x file: 开始编辑一个加密的文件。

2.:X -- 为当前文件设置密码。

3.:set key= -- 去除文件的密码。
</pre></div>

<h3 id="vim_27">vim 编码格式<a class="headerlink" href="#vim_27" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.:e ++enc=utf8 filename, 让vim用utf-8的编码打开这个文件。

2.:w ++enc=gbk，不管当前文件什么编码，把它转存成gbk编码。

3.:set fenc或:set fileencoding，查看当前文件的编码。

4.在vimrc中添加set fileencoding=ucs-bom,utf-8,cp936，vim会根据要打开的文件选择合适的编码。 注意：编码之间不要留空格。 cp936对应于gbk编码。 ucs-bom对应于windows下的文件格式。
</pre></div>

<h2 id="ctags">ctags 使用<a class="headerlink" href="#ctags" title="Permanent link"></a></h2>
<h4 id="_6">查看支持的语言<a class="headerlink" href="#_6" title="Permanent link"></a></h4>
<div class="highlight"><pre>ctags --list-languages 
</pre></div>

<h4 id="ctags_1">ctags是可以根据文件的扩展名以及文件名的形式来确定该文件中是何种语言，从而使用正确的分析器。可以使用如下命令来查看默认哪些扩展名对应哪些语言<a class="headerlink" href="#ctags_1" title="Permanent link"></a></h4>
<div class="highlight"><pre>ctags --list-maps
</pre></div>

<h4 id="ctags_2">ctags可以识别和记录哪些语法元素<a class="headerlink" href="#ctags_2" title="Permanent link"></a></h4>
<div class="highlight"><pre>可以用如下命令查看ctags可以识别的语法元素：
ctags --list-kinds
或者单独查看可以识别的c++的语法元素
ctags --list-kinds=c++
</pre></div>

<h4 id="ctags_3">ctags常用选项<a class="headerlink" href="#ctags_3" title="Permanent link"></a></h4>
<div class="highlight"><pre>ctags 
-R                       //递归记录
--languages=c++          //只扫描文件内容判定为c++的文件
--c+±kinds=+px           //记录c++文件中的函数声明和各种外部和前向声明
--langmap=c++:+.inl      //以inl为扩展名的文件是c++文件
-h +.inl                 //以inl为扩展名的文件看作是头文件的一种
--fields=+aiKSz 
--extra=+q 
--exclude=lex.yy.cc 
--exclude=copy_lex.yy.cc
</pre></div>

<h2 id="vim_28">vim 插件安装<a class="headerlink" href="#vim_28" title="Permanent link"></a></h2>
<div class="highlight"><pre>Vundle（https://github.com/VundleVim/Vundle.vim）的全称是Vim Bundle，它是一款Vim插件管理工具。Vundle让你可以非常轻松地安装、更新、搜索和清理Vim插件。它还能管理你的运行时环境，并帮助标记。我在本教程中将介绍如何安装和使用Vundle。
</pre></div>

<h4 id="_7">安装插件管理器<a class="headerlink" href="#_7" title="Permanent link"></a></h4>
<div class="highlight"><pre>git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
</pre></div>

<h4 id="vimrc">配置编辑.vimrc<a class="headerlink" href="#vimrc" title="Permanent link"></a></h4>
<div class="highlight"><pre>set nocompatible              &quot; 去除VI一致性,必须要添加
filetype off                  &quot; 必须要添加
&quot; 设置包括vundle和初始化相关的runtime path
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()
&quot; 另一种选择, 指定一个vundle安装插件的路径
&quot;call vundle#begin(&#39;~/some/path/here&#39;)
&quot; 让vundle管理插件版本,必须
Plugin &#39;VundleVim/Vundle.vim&#39;
&quot; 以下范例用来支持不同格式的插件安装.
&quot; 请将安装插件的命令放在vundle#begin和vundle#end之间.
&quot; Github上的插件
&quot; 格式为 Plugin &#39;用户名/插件仓库名&#39;
Plugin &#39;tpope/vim-fugitive&#39;
&quot; 
&quot; vim-scriptes网站上插件
&quot; plugin from http://vim-scripts.org/vim/scripts.html
&quot;Plugin &#39;L9&#39;
&quot; 
&quot; 也是git仓库，但是不是Github上的插件，比如公司内的git仓库
&quot;Plugin &#39;git://git.wincent.com/command-t.git&#39;
&quot; 
&quot; 本地的Git仓库(例如自己的插件) Plugin &#39;file:///+本地插件仓库绝对路径&#39;
&quot;Plugin &#39;file:///home/gmarik/path/to/plugin&#39;
&quot; 
&quot; 插件在仓库的子目录中.
&quot; 正确指定路径用以设置runtimepath. 以下范例插件在sparkup/vim目录下
&quot;Plugin &#39;rstacruz/sparkup&#39;, {&#39;rtp&#39;: &#39;vim/&#39;}
&quot; 
&quot; 安装L9，如果已经安装过这个插件，可利用以下格式避免命名冲突
&quot;Plugin &#39;ascenator/L9&#39;, {&#39;name&#39;: &#39;newL9&#39;}
&quot; 
&quot; nerdtree插件 文件目录管理器
Plugin &#39;scrooloose/nerdtree&#39;
&quot;
Plugin &#39;majutsushi/tagbar&#39; 
&quot; 你的所有插件需要在下面这行之前
&quot;
&quot;
&quot; 这是我安装的插件
Plugin &#39;scrooloose/syntastic&#39;
Plugin &#39;itchyny/lightline.vim&#39;
call vundle#end()            &quot; 必须

filetype plugin indent on    &quot; 必须 加载vim自带和插件相应的语法和文件类型相关脚本
&quot; 忽视插件改变缩进,可以使用以下替代:
&quot;filetype plugin on
&quot; 
&quot; 常用的命令
&quot; :PluginList       - 列出所有已配置的插件
&quot; :PluginInstall    - 安装插件,追加 `!` 用以更新或使用 :PluginUpdate
&quot; :PluginSearch foo - 搜索 foo ; 追加 `!` 清除本地缓存
&quot; :PluginClean      - 清除未使用插件,需要确认; 追加 `!` 自动批准移除未使用插件
&quot; 
&quot; 查阅 :h vundle 获取更多细节和wiki以及FAQ
&quot; NerdTree插件的配置信息
&quot;&quot;将F2设置为开关NERDTree的快捷键
&quot;&quot;nmap &lt;leader&gt;:nt :NERDTree&lt;cr&gt;
map &lt;f2&gt; :NERDTreeToggle&lt;cr&gt;
&quot;&quot;修改树的显示图标
let g:NERDTreeDirArrowExpandable = &#39;+&#39;
let g:NERDTreeDirArrowCollapsible = &#39;-&#39;
&quot;&quot;窗口位置
let g:NERDTreeWinPos=&#39;left&#39;
&quot;&quot;窗口尺寸
let g:NERDTreeSize=80
&quot;&quot;窗口是否显示行号
let g:NERDTreeShowLineNumbers=1
&quot;&quot;不显示隐藏文件
let g:NERDTreeHidden=0
let g:ycm_server_python_interpreter=&#39;/usr/local/bin/python3.12&#39;
let g:ycm_global_ycm_extra_conf=&#39;~/.vim/.ycm_extra_conf.py&#39;
&quot; 将你自己对非插件片段的配置放在这行之后
</pre></div>

<div class="highlight"><pre>vim 打开vim编辑器
:PluginList       - 列出所有已配置的插件
:PluginInstall    - 安装插件,追加 `!` 用以更新或使用 :PluginUpdate
:PluginSearch foo - 搜索 foo ; 追加 `!` 清除本地缓存
:PluginClean      - 清除未使用插件,需要确认; 追加 `!` 自动批准移除未使用插件
</pre></div>

<h4 id="vim_29">vim 使用不了退格键<a class="headerlink" href="#vim_29" title="Permanent link"></a></h4>
<div class="highlight"><pre>vim 编辑 .vimrc 中的加入“set backspace=2”
或者直接使用
echo &quot;set backspace=2&quot; &gt;&gt; ~/.vimrc   ## 启用退格键的删除功能
</pre></div>

<h3 id="vim_30">vim 快速查找字符串<a class="headerlink" href="#vim_30" title="Permanent link"></a></h3>
<div class="highlight"><pre>1. 命令模式下，输入：/字符串
比如搜索abc 输入:/abc

2. 查看下一个匹配，按下n(小写)

3. 跳转到上一个匹配，按下N（大写）


4.设置高亮搜索匹配的字符
:set hlsearch

5.取消高亮
：set nohlsearch
</pre></div>

<h3 id="vim_31">vim设置显示和取消显示行号<a class="headerlink" href="#vim_31" title="Permanent link"></a></h3>
<div class="highlight"><pre>1.显示行号
:set number
:set nu

2.不显示行号
:set nonumber
:set nonu

1.显示光标的相对行号
：set relativenumber
:set rnu
2.不显示相对行号
：set norelativenumber
:set nornu
</pre></div>

<h3 id="vim_32">vim 退出文件回到目录,或者说回到上一个缓冲区<a class="headerlink" href="#vim_32" title="Permanent link"></a></h3>
<div class="highlight"><pre>:b#
</pre></div></article></body></html><script async>
document.write(
  '<script src="http://' +
  (location.host || 'localhost').split(':')[0] +
  ':35729/livereload.js?snipver=1" async></' +
  'script>')
</script>
